package model;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author Lucas Amaral
 */
public class SessoesModel {
    private Collection<Sessao> sessões = new LinkedList<>();
    private Map<Integer, Sala> salas = new LinkedHashMap<>();
    private Map<Integer, Filme> filmes = new LinkedHashMap<>();
    Connection c;
    Statement st;
    
    public SessoesModel(Connection c, Map<Integer, Sala> salas, Map<Integer, Filme> filmes) {
        this.c = c;
        this.salas = salas;        
        this.filmes = filmes;
        try {
            st = (Statement) c.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(SessoesModel.class.getName()).log(Level.SEVERE, null, ex);
        }
        getSelecionaSessões();
    }

    public Collection<Sessao> getSessões() {
        return sessões;
    }

    public Map<Integer, Sala> getSalas() {
        return salas;
    }

    public Map<Integer, Filme> getFilmes() {
        return filmes;
    }
    
    public void getSelecionaSessões() {
        String query;
        try {
            query = "select id, IDSala, data, IDFilme, ingressosVendidos from SESSAO;";
            ResultSet rs = st.executeQuery(query);
            if (rs != null) {
                while (rs.next()) {
                    Sessao sessao = new Sessao();
                    sessao.setId(rs.getInt("id"));
                    sessao.setSala(getSalas().get(rs.getInt("IDSala")));
                    sessao.setData(rs.getTimestamp("data"));
                    sessao.setFilme(getFilmes().get(rs.getInt("IDFilme")));
                    sessao.setQtdIngressosVendidos(rs.getInt("ingressosVendidos"));
                    getSessões().add(sessao);
                }
            }
        } catch (Exception e) {/**/}
    }
    
    public void inserirSessão(Sessao sessão) {
         try {
             String query = "insert into SESSAO (IDSala, data, IDFilme, ingressosVendidos) " + "values ("
                    + sessão.getSala().getId() + ", '" + sessão.getData() + "', '" + sessão.getFilme().getId()
                     + "', " + sessão.getQtdIngressosVendidos() + ")";
             st.executeUpdate(query);
             getSessões().removeAll(sessões);
             getSelecionaSessões();
         } catch (Exception e) {
             System.out.println(e);
         }
    }
    
    public void excluirSessão(Sessao sessão) {
        try {
            String query = "delete from SESSAO where id=" + sessão.getId();
            st.executeUpdate(query);
            getSessões().remove(sessão);
        } catch (Exception e) {
            System.out.println(e);
        }
    }
    
    public void alterarSessão(Sessao sessão) {
        try {
            String query = "update SESSAO set IDSala = '" + sessão.getSala().getId() + "', " + "data='" + sessão.getData() 
                    + "', " + "IDFilme='" + sessão.getFilme().getId() + "', " + "ingressosVendidos ='" + sessão.getQtdIngressosVendidos() + "' where id=" + sessão.getId();
            st.execute(query);
        } catch (Exception e) {}
    }
}
